// 请求封装
import config from '@/config/index.js'

const BASE_URL = config.baseURL

// 白名单路径（不需要token验证的接口）
const WHITELIST = [
  '/agg/user/appLogin',
  '/agg/user/forget',
  '/agg/sms/send',
  '/agg/sms/sendCode',
  '/agg/callback/',
  '/agg/qrcode/scan'
]

// 检查是否是白名单接口
const isWhiteList = (url) => {
  return WHITELIST.some(item => url.includes(item))
}

// 请求拦截器
const request = (options) => {
  return new Promise((resolve, reject) => {
    // 获取token
    const token = uni.getStorageSync('token')
    
    // 设置请求头
    const header = {
      'Content-Type': 'application/json',
      ...options.header
    }
    
    // 如果有token且不是白名单接口，添加到请求头
    const isWhite = isWhiteList(options.url)
    console.log('请求URL:', options.url)
    console.log('是否白名单:', isWhite)
    console.log('是否有token:', !!token)
    
    if (token && !isWhite) {
      header['Authorization'] = `Bearer ${token}`
      console.log('添加了Authorization请求头')
    } else {
      console.log('未添加Authorization请求头')
    }
    
    console.log('最终请求头:', header)
    
    uni.request({
      url: BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: header,
      success: (res) => {
        // 请求成功
        if (res.statusCode === 200) {
          // 业务成功
          if (res.data.code === 0) {
            resolve(res.data)
          } else {
            // 业务失败
            uni.showToast({
              title: res.data.msg || '请求失败',
              icon: 'none',
              duration: 2000
            })
            reject(res.data)
          }
        } else if (res.statusCode === 401) {
          // token过期或未登录（白名单接口不应该跳转登录页）
          if (!isWhiteList(options.url)) {
            uni.showToast({
              title: '登录已过期，请重新登录',
              icon: 'none'
            })
            // 清除token
            uni.removeStorageSync('token')
            uni.removeStorageSync('userInfo')
            // 跳转到登录页
            setTimeout(() => {
              uni.reLaunch({
                url: '/pages/login/login'
              })
            }, 1500)
          } else {
            // 白名单接口返回401，直接显示错误信息
            uni.showToast({
              title: res.data.msg || '请求失败',
              icon: 'none'
            })
          }
          reject(res.data)
        } else {
          // 其他错误
          uni.showToast({
            title: '服务器错误',
            icon: 'none'
          })
          reject(res.data)
        }
      },
      fail: (err) => {
        // 请求失败
        uni.showToast({
          title: '网络请求失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

export default request

